Pytorch的nn.Conv2d()详解 |
您所在的位置:网站首页 › low-fear groups什么意思 › Pytorch的nn.Conv2d()详解 |
Pytorch的nn.Conv2d()详解
nn.Conv2d()的使用、形参与隐藏的权重参数in_channelsout_channelskernel_sizestride = 1padding = 0dilation = 1groups = 1bias = Truepadding_mode = 'zeros'
nn.Conv2d()的使用、形参与隐藏的权重参数
二维卷积应该是最常用的卷积方式了,在Pytorch的nn模块中,封装了nn.Conv2d()类作为二维卷积的实现。使用方法和普通的类一样,先实例化再使用。下面是一个只有一层二维卷积的神经网络,作为nn.Conv2d()方法的使用简介: class Net(nn.Module): def __init__(self): nn.Module.__init__(self) self.conv2d = nn.Conv2d(in_channels=3,out_channels=64,kernel_size=4,stride=2,padding=1) def forward(self, x): print(x.requires_grad) x = self.conv2d(x) return x print(net.conv2d.weight) print(net.conv2d.bias) 它的形参由Pytorch手册可以查得,前三个参数是必须手动提供的,后面的有默认值。接下来将一一介绍: 这个很好理解,就是输入的四维张量[N, C, H, W]中的C了,即输入张量的channels数。这个形参是确定权重等可学习参数的shape所必需的。 out_channels也很好理解,即期望的四维输出张量的channels数,不再多说。 kernel_size卷积核的大小,一般我们会使用5x5、3x3这种左右两个数相同的卷积核,因此这种情况只需要写kernel_size = 5这样的就行了。如果左右两个数不同,比如3x5的卷积核,那么写作kernel_size = (3, 5),注意需要写一个tuple,而不能写一个列表(list)。 stride = 1卷积核在图像窗口上每次平移的间隔,即所谓的步长。这个概念和Tensorflow等其他框架没什么区别,不再多言。 padding = 0 Pytorch与Tensorflow在卷积层实现上最大的差别就在于padding上。 Padding即所谓的图像填充,后面的int型常数代表填充的多少(行数、列数),默认为0。需要注意的是这里的填充包括图像的上下左右,以padding = 1为例,若原始图像大小为32x32,那么padding后的图像大小就变成了34x34,而不是33x33。 Pytorch不同于Tensorflow的地方在于,Tensorflow提供的是padding的模式,比如same、valid,且不同模式对应了不同的输出图像尺寸计算公式。而Pytorch则需要手动输入padding的数量,当然,Pytorch这种实现好处就在于输出图像尺寸计算公式是唯一的,即 这个参数决定了是否采用空洞卷积,默认为1(不采用)。从中文上来讲,这个参数的意义从卷积核上的一个参数到另一个参数需要走过的距离,那当然默认是1了,毕竟不可能两个不同的参数占同一个地方吧(为0)。 更形象和直观的图示可以观察Github上的Dilated convolution animations,展示了dilation=2的情况。 groups = 1决定了是否采用分组卷积,groups参数可以参考groups参数详解 bias = True即是否要添加偏置参数作为可学习参数的一个,默认为True。 padding_mode = ‘zeros’即padding的模式,默认采用零填充。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |